package com.fengwk.user.service;

import java.util.Collection;
import java.util.List;

import com.fengwk.support.page.PageInfo;
import com.fengwk.user.face.model.User;

public interface UserService {
	
	/**
	 * 存储用户
	 * 
	 * @param avatarId 用户头像id
	 * @param username 用户名
	 * @param email 邮箱
	 * @param mobilePhone 手机号
	 * @param password 密码
	 * @param nickname 昵称
     * @param realName 真实姓名
	 * @param idCard 身份证
	 * @param sex 性别
	 * @param birthTime 出生时间
	 * @return
	 */
	User saveUser(Long avatarId, String username, String email, String mobilePhone, String password, String nickname, String realName, String idCard, Integer sex, Long birthTime);
	
	/**
	 * 移除用户
	 * 
	 * @param userId 用户id
	 * @return
	 */
	User removeUser(Long userId);
	
	/**
	 * 更新用户
	 * 
	 * @param userId 用户id,更新键
	 * @param avatarId 用户头像id
	 * @param username 用户名
	 * @param email 邮箱
	 * @param mobilePhone 手机号
	 * @param password 密码
	 * @param nickname 昵称
	 * @param realName 真实姓名
	 * @param idCard 身份证
	 * @param sex 性别
	 * @param birthTime 出生时间
	 * @param status 状态
	 * @return
	 */
	User updateUser(Long userId, Long avatarId, String username, String email, String mobilePhone, String password, String nickname, String realName, String idCard, Integer sex, Long birthTime, Integer status);
	
	/**
	 * 同步角色
	 * 
	 * @param userId 目标用户id
	 * @param roleIds 同步角色id列表
	 */
	void synRole(Long userId, Collection<Long> roleIds);
	
	/**
	 * 添加用户角色
	 * 
	 * @param userId 添加目标用户id
	 * @param roleIds 添加的角色id列表
	 */
	void addRole(Long userId, Collection<Long> roleIds);
	
	/**
	 * 移除用户角色
	 * 
	 * @param userId 移除目标用户id
	 * @param roleIds 移除的角色id列表
	 */
	void removeRole(Long userId, Collection<Long> roleIds);
	
	/**
	 * 通过用户名获取User
	 * 
	 * @param username 用户名
	 * @return
	 */
	User getUserByUsername(String username);
	
	/**
	 * 通过手机号获取User
	 * 
	 * @param mobilePhone 手机号
	 * @return
	 */
	User getUserByMobilePhone(String mobilePhone);
	
	/**
	 * 通过邮箱获取User
	 * 
	 * @param email 邮箱
	 * @return
	 */
	User getUserByEmail(String email);
	
	/**
	 * 通过用户id获取User
	 * 
	 * @param userId 用户id
	 * @return
	 */
	User getUserByUserId(Long userId);
	
	/**
	 * 通过用户id列表获取User列表
	 * 
	 * @param userIds 用户id列表
	 * @return
	 */
	List<User> listUserByUserIds(Collection<Long> userIds);
	
	/**
	 * 分页获取用户
	 * 
	 * @param pageNum 页码
	 * @param pageSize 每页大小
	 * @return
	 */
	PageInfo<User> pageUser(int pageNum, int pageSize);
	
}
